// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "gpu/config/gpu_control_list.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace gpu {

class StringInfoTest : public testing::Test {
public:
    StringInfoTest() { }
    virtual ~StringInfoTest() { }

    typedef GpuControlList::StringInfo StringInfo;
};

TEST_F(StringInfoTest, ValidStringInfo)
{
    const std::string op[] = {
        "contains",
        "beginwith",
        "endwith",
        "="
    };
    for (size_t i = 0; i < arraysize(op); ++i) {
        {
            StringInfo info(op[i], std::string());
            EXPECT_TRUE(info.IsValid());
        }
        {
            StringInfo info(op[i], "hello");
            EXPECT_TRUE(info.IsValid());
        }
    }
}

TEST_F(StringInfoTest, InvalidStringInfo)
{
    const std::string op[] = {
        "Contains",
        "BeginWith",
        "EndWith",
        " =",
        "= "
    };
    for (size_t i = 0; i < arraysize(op); ++i) {
        StringInfo info(op[i], "hello");
        EXPECT_FALSE(info.IsValid());
    }
}

TEST_F(StringInfoTest, StringComparison)
{
    {
        StringInfo info("contains", "happy");
        EXPECT_TRUE(info.Contains("unhappy"));
        EXPECT_TRUE(info.Contains("happy1"));
        EXPECT_TRUE(info.Contains("happy"));
        EXPECT_TRUE(info.Contains("a happy dog"));
        EXPECT_TRUE(info.Contains("Happy"));
        EXPECT_TRUE(info.Contains("HAPPY"));
        EXPECT_FALSE(info.Contains("ha-ppy"));
    }
    {
        StringInfo info("beginwith", "happy");
        EXPECT_FALSE(info.Contains("unhappy"));
        EXPECT_TRUE(info.Contains("happy1"));
        EXPECT_TRUE(info.Contains("happy"));
        EXPECT_FALSE(info.Contains("a happy dog"));
        EXPECT_TRUE(info.Contains("Happy"));
        EXPECT_TRUE(info.Contains("HAPPY"));
        EXPECT_FALSE(info.Contains("ha-ppy"));
    }
    {
        StringInfo info("endwith", "happy");
        EXPECT_TRUE(info.Contains("unhappy"));
        EXPECT_FALSE(info.Contains("happy1"));
        EXPECT_TRUE(info.Contains("happy"));
        EXPECT_FALSE(info.Contains("a happy dog"));
        EXPECT_TRUE(info.Contains("Happy"));
        EXPECT_TRUE(info.Contains("HAPPY"));
        EXPECT_FALSE(info.Contains("ha-ppy"));
    }
    {
        StringInfo info("=", "happy");
        EXPECT_FALSE(info.Contains("unhappy"));
        EXPECT_FALSE(info.Contains("happy1"));
        EXPECT_TRUE(info.Contains("happy"));
        EXPECT_FALSE(info.Contains("a happy dog"));
        EXPECT_TRUE(info.Contains("Happy"));
        EXPECT_TRUE(info.Contains("HAPPY"));
        EXPECT_FALSE(info.Contains("ha-ppy"));
        EXPECT_FALSE(info.Contains("ha ppy"));
        EXPECT_FALSE(info.Contains(" happy"));
        EXPECT_FALSE(info.Contains("happy "));
    }
}

} // namespace gpu
